package com.asia5b.a5mall.middleware.api

import com.asia5b.a5mall.middleware.model.base.ResultModel
import com.asia5b.a5mall.middleware.model.cart.TransModel
import com.asia5b.a5mall.middleware.model.order.OrderCheckParamsModel
import com.asia5b.a5mall.middleware.model.order.OrderCreateResModel
import com.asia5b.a5mall.middleware.model.bean.PostParcelBean
import com.asia5b.a5mall.middleware.model.shop.OrderParcelDetailModel
import io.reactivex.Observable
import okhttp3.ResponseBody
import retrofit2.http.*

/**
 * Created by zhangyuncai on 2019/12/21.
 */
interface TradeApi {

    /**
     * @api
     * 获取结算参数
     */
    @GET("trade/checkout-params")
    fun getParam(): Observable<OrderCheckParamsModel>


    /**
     * @api
     * 创建交易
     * @param goodscata_id 运输方式ID
     * @param client 客户端类型
     * @param way 检查获取方式，购物车还是立即购买
     * @param payment_num  付款类型，一次罚款还是二次付款
     * @param remark  备注
     * @param house_id  仓库ID
     */
    @POST("trade/create")
    fun create(@QueryMap map:MutableMap<String,Any>): Observable<OrderCreateResModel>

//    @POST("trade/create")
//    fun create(@Query(value = "payment_num") payment_num: Int = 1,
//               @Query("client") client: String = "WAP",
//               @Query("goodscata_id") goodscata_id: Int,
//               @Query("house_id") house_id: Int,
//               @Query("way") way: String = "BUY_NOW"): Observable<OrderCreateResModel>

    /**
     * @Note   获取支付跳转链接
     * @param trade_type 交易类型 ==order时,order_sn就是订单号 ==trade时,order_sn就是交易号
     * @param order_sn 订单号
     */
    /**
     * @api
     * 获取支付跳转链接
     * @param click_type 设备
     * @param order_sn 订单号
     * @param trade_type 交易类型
     */
    @GET("trade/orders/a5bpay/{trade_type}/{order_sn}")
    fun getTradeSerialNo(@Path("order_sn") order_sn: String,
                         @Path("trade_type") trade_type: String = "order",
                         @Query("click_type") click_type: String = "APP"): Observable<ResponseBody>


    /**
     * @Note   订单使用优惠券
     * @param   sellerId    店铺ID
     * @param   mcId   todo 优惠券ID 当==0时表示不使用任何优惠券
     * @param way 购物车/商品
    https://apimall.asiajy.com/buyer/trade/promotion/83/seller/263/coupon?way=CART
     */
    /**
     * @api
     * 设置优惠券
     * 使用优惠券的时候分为三种情况：前2种情况couponId 不为0,不为空。第3种情况couponId为0,1、使用优惠券:在刚进入订单结算页，为使用任何优惠券之前。2、切换优惠券:在1、情况之后，当用户切换优惠券的时候。3、取消已使用的优惠券:用户不想使用优惠券的时候
     * @param seller_id 店铺ID
     * @param mc_id 优惠券ID
     * @param way 结算方式，BUY_NOW：立即购买，CART：购物车
     */
    @POST("trade/promotion/{seller_id}/seller/{mc_id}/coupon")
    fun useCoupon(@Path("seller_id") sellerId: Int, @Path("mc_id") mcId: Int, @Query("way") way: String = "CART"): Observable<ResponseBody>

    /**
     * @Note   结算页—读取可用的优惠券列表
     * @param   sellerIds    商家ID集合
     */
    @GET("members/coupon/{seller_ids}")
    fun getCouponListbyUsed(@Path("seller_ids") sellerIds: String): Observable<ResponseBody>


    /**
     * @api
     * 设置收货地址id
     * @param address_id 收货地址id
     */
    @POST("trade/checkout-params/address-id/{address_id}")
    fun setAddress(@Path("address_id") address_id: Int): Observable<ResponseBody>

    /**
     * @api
     * 设置支付类型
     * @param payment_type 支付类型 在线支付：ONLINE，货到付款：COD
     */
    @POST("trade/checkout-params/payment-type")
    fun setPaymentType(@Query("payment_type") payment_type: String): Observable<ResponseBody>

    /**
     * @api
     * 设置发票信息
     * @param receipt_method 开票方式
     * @param receipt_type 发票类型 ELECTRO：电子普通发票，VATORDINARY：增值税普通发票，VATOSPECIAL：增值税专用发票
     * @param receipt_title 发票抬头
     * @param receipt_content 发票内容
     * @param tax_no 纳税人识别号
     * @param reg_addr 注册地址
     * @param reg_tel 注册电话
     * @param bank_name 开户银行
     * @param bank_account 银行账户
     * @param member_name 收票人姓名
     * @param member_mobile 收票人手机号
     * @param member_email 收票人邮箱
     * @param region 收票地址–所属地区信息
     * @param detail_addr 收票地址–详细地址
     */
    @POST("trade/checkout-params/receipt")
    fun setReceipt(@Query("type") receiptType: String,
                   @Query("receipt_title") receiptTitle: String,
                   @Query("receipt_content") receiptContent: String,
                   @Query("tax_no") dutyInvoice: String): Observable<ResponseBody>

    /**
     * @api
     * 取消发票
     */
    @DELETE("trade/checkout-params/receipt")
    fun deleteReceipt(): Observable<ResponseBody>

    /**
     * @api
     * 设置送货时间
     * @param receive_time 送货时间
     */
    @POST("trade/checkout-params/receive-time")
    fun setTime(@Query("receive_time") time: String): Observable<ResponseBody>

    /**
     * @api
     * 设置订单备注
     * @param remark 订单备注
     */
    @POST("trade/checkout-params/remark")
    fun setRemark(@Query("remark") remark: String): Observable<ResponseBody>

    /**
     * @api
     * 打包详情（预申请）(获取申请打包详细资料)
     * @param packJson
     */
    @POST("packager/pack_list")
    fun getPackList(@Body parcelBeanList: ArrayList<PostParcelBean>): Observable<ResultModel<OrderParcelDetailModel>>

    /**
     * @api
     * 确认打包申请接口
     * @param order_sn 订单编号
     * @param ids 快递单ID集
     * @param house_id 仓库ID
     * @param adder_id 收货地址ID
     * @param fast_type 国际运输方式
     * @param shipping_id 本地配送方式
     * @param guarantee_price 保险费
     * @param wood_price 木架费
     * @param country_id 订单里的国家ID
     * @param transport_type 国际运输方式 1空运 0海运
     * @param remark 订单备注
     * @param protect 特殊保护
     * @param labelling 贴标签
     */
    @POST("packager/pack")
    @FormUrlEncoded
    fun orderParcel2(@FieldMap map: HashMap<String, Any>): Observable<ResultModel<String>>

    /**
     * @api
     * 国际运输方式列表
     * @param adder_id 地址ID
     * @param house_id 仓库ID
     * @param traits 是否敏感货(1是敏感货，0不是敏感货)
     */
    @POST("packager/transport")
    fun getInterTranser(@Query("adder_id") adder_id: Int,
                        @Query("house_id") house_id: Int,
                        @Query("traits") traits: Int): Observable<ResultModel<ArrayList<TransModel>>>

    /**
     * @api
     * 发起支付，获得支付地址(订单号转交易号)
     * @param order_id 订单ID
     * @param amount 总金额
     * @param trade_type 设备
     */
    @POST("packager/startPay")
    fun startPay(@Query("order_id") order_id: Int,
                 @Query("amount") amount: String,
                 @Query("trade_type") trade_type: String = "APP"): Observable<ResultModel<String>>

    /**
     * @api
     * 支付绑定接口
     * @param username 用户名
     * @param password 密码
     */
    @POST("trade/orders/bind")
    fun bindPay(@Query("username") username: String,
                @Query("password") password: String): Observable<ResultModel<Any>>

}